package nsu.edu.zsq.bean;

import java.util.Date;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import org.springframework.format.annotation.DateTimeFormat;

import com.fasterxml.jackson.annotation.JsonFormat;

import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * Description: 教师信息表
 */
@ToString
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
    /**
     *  id
     */
    private Integer id;

    /**
     * 教师编号 teacher_no
     */
    @Excel(name = "教师编号", orderNum = "0")
    @Pattern(regexp="^[\\S]{5,20}$", message="教师编号5-20位数字，且不能出现空格")
    private String teacherNo;

    /**
     * 教师姓名 teacher_name
     */
    @Excel(name = "*姓名", orderNum = "1")
    @Pattern(regexp="^[\\S]{2,15}$", message="教师姓名2-15个字符，且不能出现空格")
    private String teacherName;

    /**
     * 所在的学校组织 org_id
     */
    @Excel(name = "*院系ID", orderNum = "10")
    @Min(value=1, message="院系ID格式不正确")
    private Integer orgId;

    /**
     * 教授的课程数量 course_num
     */
    private Integer courseNum;

    /**
     * 英文姓名 teacher_ename
     */
    private String teacherEname;

    /**
     * 身份证号 id_number
     */
    @Excel(name = "*身份证号", orderNum = "2")
    @Pattern(regexp="(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)", message="请输入正确的身份证号")
    private String idNumber;

    /**
     * 登录密码 password
     */
    private String password;

    /**
     * 性别，1：女；2：男 teacher_sex
     */
    @Excel(name = "*性别", orderNum = "3")
    @Min(value=1, message="性别格式不正确")
    @Max(value=2, message="性别格式不正确")
    private Integer teacherSex;

    /**
     * 年龄 teacher_age
     */
    private Integer teacherAge;

    /**
     * 出生日期 teacher_birth
     */
    @Excel(name = "*出生日期", orderNum = "4")
    @JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
    // 入参时格式转换
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @NotNull(message="出生日期不能为空")
    private Date teacherBirth;

    /**
     * 政治面貌 politics
     */
    @Excel(name = "*政治面貌", orderNum = "5")
    private String politics;

    /**
     * 民族 nation
     */
    @Excel(name = "*民族", orderNum = "6")
    @Pattern(regexp="^[\\S]{1,10}$", message="民族1-5个字符，且不能出现空格")
    private String nation;

    /**
     * 毕业学校 graduate_school
     */
    @Excel(name = "毕业学校", orderNum = "8")
    @Pattern(regexp="^[\\S]{0,15}$", message="毕业学校0-15个字符，且不能出现空格")
    private String graduateSchool;

    /**
     * 籍贯 homeplace
     */
    @Excel(name = "*籍贯", orderNum = "7")
    @Pattern(regexp="^[\\S]{1,10}$", message="籍贯1-10个字符，且不能出现空格")
    private String homeplace;

    /**
     * 入校日期 start_time
     */
    @Excel(name = "*入校日期", orderNum = "9")
    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
    // 入参时格式转换
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @NotNull(message="入校日期不能为空")
    private Date startTime;

    /**
     * 院系 school_dep
     */
    private String schoolDep;

    /**
     * 学历 graduate_status
     */
    @NotNull
    @Excel(name = "*学历", orderNum = "11")
    private String graduateStatus;

    /**
     * 通讯地址 address
     */
    @Excel(name = "通讯地址", orderNum = "12")
    @Pattern(regexp="^[\\S]{0,20}$", message="通讯地址0-20个字符，且不能出现空格")
    private String address;

    /**
     * 备注1 remark1
     */
    @Excel(name = "备注1", orderNum = "13")
    @Pattern(regexp="^[\\S]{0,50}$", message="备注 0-50个字符，且不能出现空格")
    private String remark1;

    /**
     * 备注2 remark2
     */
    private String remark2;

    /**
     * 是否删除，0：否，1：是 is_delete
     */
    private Integer isDelete;

    /**
     * 排序号，默认1，降序排 sort
     */
    @Excel(name = "*排序号", orderNum = "14")
    @Min(value=1, message="排序号格式不正确")
    @Max(value=99999,message="排序号格式不正确")
    private Integer sort;

    /**
     * 操作者 operator
     */
    private String operator;

    /**
     * 操作时间 operator_time
     */
    private Date operatorTime;

    /**
     * Get 
     * @return id 
     */
    public Integer getId() {
        return id;
    }

    /**
     * Set 
     * @param id 
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * Get 教师编号
     * @return teacher_no 教师编号
     */
    public String getTeacherNo() {
        return teacherNo;
    }

    /**
     * Set 教师编号
     * @param teacherNo 教师编号
     */
    public void setTeacherNo(String teacherNo) {
        this.teacherNo = teacherNo == null ? null : teacherNo.trim();
    }

    /**
     * Get 教师姓名
     * @return teacher_name 教师姓名
     */
    public String getTeacherName() {
        return teacherName;
    }

    /**
     * Set 教师姓名
     * @param teacherName 教师姓名
     */
    public void setTeacherName(String teacherName) {
        this.teacherName = teacherName == null ? null : teacherName.trim();
    }

    /**
     * Get 所在的学校组织
     * @return org_id 所在的学校组织
     */
    public Integer getOrgId() {
        return orgId;
    }

    /**
     * Set 所在的学校组织
     * @param orgId 所在的学校组织
     */
    public void setOrgId(Integer orgId) {
        this.orgId = orgId;
    }

    /**
     * Get 教授的课程数量
     * @return course_num 教授的课程数量
     */
    public Integer getcourseNum() {
        return courseNum;
    }

    /**
     * Set 教授的课程数量
     * @param courseNum 教授的课程数量
     */
    public void setcourseNum(Integer courseNum) {
        this.courseNum = courseNum;
    }

    /**
     * Get 英文姓名
     * @return teacher_ename 英文姓名
     */
    public String getTeacherEname() {
        return teacherEname;
    }

    /**
     * Set 英文姓名
     * @param teacherEname 英文姓名
     */
    public void setTeacherEname(String teacherEname) {
        this.teacherEname = teacherEname == null ? null : teacherEname.trim();
    }

    /**
     * Get 身份证号
     * @return id_number 身份证号
     */
    public String getIdNumber() {
        return idNumber;
    }

    /**
     * Set 身份证号
     * @param idNumber 身份证号
     */
    public void setIdNumber(String idNumber) {
        this.idNumber = idNumber == null ? null : idNumber.trim();
    }

    /**
     * Get 登录密码
     * @return password 登录密码
     */
    public String getPassword() {
        return password;
    }

    /**
     * Set 登录密码
     * @param password 登录密码
     */
    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }

    /**
     * Get 性别，1：女；2：男
     * @return teacher_sex 性别，1：女；2：男
     */
    public Integer getTeacherSex() {
        return teacherSex;
    }

    /**
     * Set 性别，1：女；2：男
     * @param teacherSex 性别，1：女；2：男
     */
    public void setTeacherSex(Integer teacherSex) {
        this.teacherSex = teacherSex;
    }

    /**
     * Get 年龄
     * @return teacher_age 年龄
     */
    public Integer getTeacherAge() {
        return teacherAge;
    }

    /**
     * Set 年龄
     * @param teacherAge 年龄
     */
    public void setTeacherAge(Integer teacherAge) {
        this.teacherAge = teacherAge;
    }

    /**
     * Get 出生日期
     * @return teacher_birth 出生日期
     */
    public Date getTeacherBirth() {
        return teacherBirth;
    }

    /**
     * Set 出生日期
     * @param teacherBirth 出生日期
     */
    public void setTeacherBirth(Date teacherBirth) {
        this.teacherBirth = teacherBirth;
    }

    /**
     * Get 政治面貌
     * @return politics 政治面貌
     */
    public String getPolitics() {
        return politics;
    }

    /**
     * Set 政治面貌
     * @param politics 政治面貌
     */
    public void setPolitics(String politics) {
        this.politics = politics == null ? null : politics.trim();
    }

    /**
     * Get 民族
     * @return nation 民族
     */
    public String getNation() {
        return nation;
    }

    /**
     * Set 民族
     * @param nation 民族
     */
    public void setNation(String nation) {
        this.nation = nation == null ? null : nation.trim();
    }

    /**
     * Get 毕业学校
     * @return graduate_school 毕业学校
     */
    public String getGraduateSchool() {
        return graduateSchool;
    }

    /**
     * Set 毕业学校
     * @param graduateSchool 毕业学校
     */
    public void setGraduateSchool(String graduateSchool) {
        this.graduateSchool = graduateSchool == null ? null : graduateSchool.trim();
    }

    /**
     * Get 籍贯
     * @return homeplace 籍贯
     */
    public String getHomeplace() {
        return homeplace;
    }

    /**
     * Set 籍贯
     * @param homeplace 籍贯
     */
    public void setHomeplace(String homeplace) {
        this.homeplace = homeplace == null ? null : homeplace.trim();
    }

    /**
     * Get 入校日期
     * @return start_time 入校日期
     */
    public Date getStartTime() {
        return startTime;
    }

    /**
     * Set 入校日期
     * @param startTime 入校日期
     */
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    /**
     * Get 院系
     * @return school_dep 院系
     */
    public String getSchoolDep() {
        return schoolDep;
    }

    /**
     * Set 院系
     * @param schoolDep 院系
     */
    public void setSchoolDep(String schoolDep) {
        this.schoolDep = schoolDep == null ? null : schoolDep.trim();
    }

    /**
     * Get 学历
     * @return graduate_status 学历
     */
    public String getGraduateStatus() {
        return graduateStatus;
    }

    /**
     * Set 学历
     * @param graduateStatus 学历
     */
    public void setGraduateStatus(String graduateStatus) {
        this.graduateStatus = graduateStatus == null ? null : graduateStatus.trim();
    }

    /**
     * Get 通讯地址
     * @return address 通讯地址
     */
    public String getAddress() {
        return address;
    }

    /**
     * Set 通讯地址
     * @param address 通讯地址
     */
    public void setAddress(String address) {
        this.address = address == null ? null : address.trim();
    }

    /**
     * Get 备注1
     * @return remark1 备注1
     */
    public String getRemark1() {
        return remark1;
    }

    /**
     * Set 备注1
     * @param remark1 备注1
     */
    public void setRemark1(String remark1) {
        this.remark1 = remark1 == null ? null : remark1.trim();
    }

    /**
     * Get 备注2
     * @return remark2 备注2
     */
    public String getRemark2() {
        return remark2;
    }

    /**
     * Set 备注2
     * @param remark2 备注2
     */
    public void setRemark2(String remark2) {
        this.remark2 = remark2 == null ? null : remark2.trim();
    }

    /**
     * Get 是否删除，0：否，1：是
     * @return is_delete 是否删除，0：否，1：是
     */
    public Integer getIsDelete() {
        return isDelete;
    }

    /**
     * Set 是否删除，0：否，1：是
     * @param isDelete 是否删除，0：否，1：是
     */
    public void setIsDelete(Integer isDelete) {
        this.isDelete = isDelete;
    }

    /**
     * Get 排序号，默认1，降序排
     * @return sort 排序号，默认1，降序排
     */
    public Integer getSort() {
        return sort;
    }

    /**
     * Set 排序号，默认1，降序排
     * @param sort 排序号，默认1，降序排
     */
    public void setSort(Integer sort) {
        this.sort = sort;
    }

    /**
     * Get 操作者
     * @return operator 操作者
     */
    public String getOperator() {
        return operator;
    }

    /**
     * Set 操作者
     * @param operator 操作者
     */
    public void setOperator(String operator) {
        this.operator = operator == null ? null : operator.trim();
    }

    /**
     * Get 操作时间
     * @return operator_time 操作时间
     */
    public Date getOperatorTime() {
        return operatorTime;
    }

    /**
     * Set 操作时间
     * @param operatorTime 操作时间
     */
    public void setOperatorTime(Date operatorTime) {
        this.operatorTime = operatorTime;
    }
}